<?php
/**
 * 备份并删除未使用的表
 */

// 数据库配置
$host = '101.35.252.112';
$port = '45508';
$dbname = 'trace';
$username = 'root';
$password = 'CeyZFHxjPABhp2Hz';

// 需要备份并删除的表
$tablesToRemove = [
    'gf_anti_fraud',
    'gf_attribution', 
    'gf_et_apps',
    'gf_fingerprints',
    'gf_stats_daily',
    'gf_et_system_email',
    'gf_et_system_email_config'
];

try {
    // 创建数据库连接
    $pdo = new PDO("mysql:host=$host;port=$port;dbname=$dbname;charset=utf8mb4", $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    echo "✅ 数据库连接成功\n";
    
    // 创建备份目录
    $backupDir = __DIR__ . '/backups/' . date('Y-m-d_H-i-s');
    if (!is_dir($backupDir)) {
        mkdir($backupDir, 0755, true);
    }
    
    echo "📁 备份目录: $backupDir\n";
    
    foreach ($tablesToRemove as $table) {
        echo "\n🔍 处理表: $table\n";
        
        // 检查表是否存在
        $stmt = $pdo->query("SHOW TABLES LIKE '$table'");
        if ($stmt->rowCount() === 0) {
            echo "⚠️  表 $table 不存在，跳过\n";
            continue;
        }
        
        // 获取表结构
        $structure = $pdo->query("SHOW CREATE TABLE `$table`")->fetch(PDO::FETCH_ASSOC);
        $createTableSql = $structure['Create Table'];
        
        // 获取表数据
        $data = $pdo->query("SELECT * FROM `$table`")->fetchAll(PDO::FETCH_ASSOC);
        
        // 保存表结构备份
        $structureFile = $backupDir . "/{$table}_structure.sql";
        file_put_contents($structureFile, "-- 表结构备份: $table\n" . $createTableSql . ";\n\n");
        
        // 保存数据备份
        if (!empty($data)) {
            $dataFile = $backupDir . "/{$table}_data.sql";
            $insertSql = "-- 数据备份: $table\n";
            
            foreach ($data as $row) {
                $columns = array_keys($row);
                $values = array_map(function($value) use ($pdo) {
                    return $value === null ? 'NULL' : $pdo->quote($value);
                }, array_values($row));
                
                $insertSql .= "INSERT INTO `$table` (`" . implode('`, `', $columns) . "`) VALUES (" . implode(', ', $values) . ");\n";
            }
            
            file_put_contents($dataFile, $insertSql);
            echo "✅ 数据备份完成: " . count($data) . " 行\n";
        } else {
            echo "ℹ️  表 $table 为空，无需数据备份\n";
        }
        
        echo "✅ 结构备份完成\n";
        
        // 删除表
        $pdo->exec("DROP TABLE `$table`");
        echo "✅ 表 $table 已删除\n";
    }
    
    echo "\n🎉 所有未使用表已备份并删除完成！\n";
    echo "📦 备份文件保存在: $backupDir\n";
    
    // 生成恢复脚本
    $restoreScript = $backupDir . "/restore_tables.php";
    $restoreContent = "<?php
/**
 * 恢复被删除的表
 * 运行此脚本可以恢复所有被删除的表
 */

\$host = '$host';
\$port = '$port';
\$dbname = '$dbname';
\$username = '$username';
\$password = '$password';

try {
    \$pdo = new PDO(\"mysql:host=\$host;port=\$port;dbname=\$dbname;charset=utf8mb4\", \$username, \$password);
    \$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    
    echo \"✅ 数据库连接成功\\n\";
    
    // 读取并执行所有结构文件
    \$structureFiles = glob(__DIR__ . '/*_structure.sql');
    foreach (\$structureFiles as \$file) {
        \$sql = file_get_contents(\$file);
        \$pdo->exec(\$sql);
        echo \"✅ 恢复表结构: \" . basename(\$file) . \"\\n\";
    }
    
    // 读取并执行所有数据文件
    \$dataFiles = glob(__DIR__ . '/*_data.sql');
    foreach (\$dataFiles as \$file) {
        \$sql = file_get_contents(\$file);
        \$pdo->exec(\$sql);
        echo \"✅ 恢复表数据: \" . basename(\$file) . \"\\n\";
    }
    
    echo \"\\n🎉 所有表已恢复完成！\\n\";
    
} catch (PDOException \$e) {
    echo \"❌ 恢复失败: \" . \$e->getMessage() . \"\\n\";
    exit(1);
}
";
    
    file_put_contents($restoreScript, $restoreContent);
    echo "🔄 恢复脚本已生成: restore_tables.php\n";
    
} catch (PDOException $e) {
    echo "❌ 数据库连接失败: " . $e->getMessage() . "\n";
    exit(1);
}